import {app} from "@electron/remote";

let fs = require("fs");//获取文件系统模块，负责读写文件
let path = require("path");//工具模块，处理文件路径的小工具
let JSZIP = require("jszip");
let zip = new JSZIP();
import {name as pkgName,version} from "../../../package.json";
const appDataPath = app.getPath('appData')
const appFilePath = path.join(appDataPath, `/${pkgName}`)
import { saveAs } from 'file-saver'
 import {
 	Decrypt,
 	Encrypt
 } from "@/utils/keyData";
const exportPath = appFilePath + '/taskFile'

//读取目录及文件 (导出时用的)
function readDir(obj, nowPath) {
    let files = fs.readdirSync(nowPath);//读取目录中的所有文件及文件夹（同步操作）
    files.forEach(  (fileName, index) =>{//遍历检测目录中的文件
        console.log(fileName, index);//打印当前读取的文件名
        let fillPath = nowPath + "/" + fileName;
        let file = fs.statSync(fillPath);//获取一个文件的属性
        if (file.isDirectory()) {//如果是目录的话，继续查询
            // 实生成的文件目录
            let dirlist = obj.folder(fileName);//压缩对象中生成该目录
            console.log(fillPath);
            readDir(dirlist, fillPath);//重新检索目录文件
        } else {
            console.log(fs.readFileSync(fillPath))
         //   let fielKey= await Encrypt()

            obj.file(fileName,fs.readFileSync(fillPath)  );//压缩目录添加文件
        }
    });
}

//开始压缩文件   导出数据包
function startZIP(row,dataJson) {
   // var currPath = __dirname;//文件的绝对路径 当前当前js所在的绝对路径
   // var targetDir = path.join(currPath, "JsonMerge");
   // var sjson ={"dwer":"1211"};
   // zip.file("data.json", Encrypt(JSON.stringify(dataJson)));
    console.log(dataJson)
    zip.file("data.json", JSON.stringify(dataJson));
    const  filePath =path.join(exportPath, `/${row.id}`)
    console.log(filePath)

    let ruondZip = zip.folder(row.id);
    readDir(ruondZip, filePath);
    zip.generateAsync({
        type: "blob",
    })
        .then(
            (blob) => {
                saveAs(
                    blob,
                    row.taskName + "-数据-" + version + ".zip"
                );
            },
            (err) => {
                //alert('导出失败',err)
                console.log(err);
            }
        );

}



//结束压缩文件
function endZIP(file) {
      zip.loadAsync(file).then( async () => {
           // 遍历 ZIP 文件中的所有条目（文件和文件夹）
           for (const entryName in zip.files) {
               const entry = zip.files[entryName];
                const outputPath = path.join(exportPath, entryName);
               console.log(outputPath);
               console.log(entry);
               if (entry.dir) {
                   // 如果条目是文件夹，创建相应的目录
                   fs.mkdirSync(outputPath, {recursive: true});
                   console.log(`目录 ${entryName} 已创建`);
               } else {
                   //过滤掉包里的 data.json 文件 其余资源插入本地包
                   if(entryName.includes("data.json")){
                       continue;
                   }
                   // 如果条目是文件，写入文件到输出路径
                   const outputDir = path.dirname(outputPath);
                     fs.mkdir(outputDir, { recursive: true },async (sys)=>{
                         console.log(sys)
                         if(!sys){
                             const fileContent = await entry.async('nodebuffer');
                             console.log(fileContent)
                             fs.writeFileSync(outputPath, fileContent);
                             console.log(`文件 ${entryName} 已保存`);
                         }else {
                             console.error(sys)
                         }

                     }); // 确保目录存在

               }
           }
       }).catch(error => {
           console.error('处理 ZIP 文件时出错:', error);
       });


}


// async function unzipAndSave(zipData, outputDir) {
//     await zip.loadAsync(zipData.file);
//
//     const promises = [];
//     for (const fileName in zip.files) {
//            console.log(fileName)
//         const file = zip.files[fileName];
//         const outputPath = path.join(outputDir, fileName);
//
//
//         if (file.dir) {
//             // 如果条目是文件夹，创建相应的目录
//             await fs.mkdir(outputPath, { recursive: true });
//
//         } else {
//             // 确保目录存在
//             const outputDirForFile = path.dirname(outputPath);
//             await fs.mkdir(outputDirForFile, { recursive: true });
//             console.log(file)
//             // 读取文件内容并保存到本地
//             promises.push(file.async('nodebuffer').then(buffer => {
//                 console.log(buffer)
//                 return fs.writeFile(outputPath, buffer);
//             }));
//         }
//
//
//     }
//
//     // 等待所有文件保存完成
//     await Promise.all(promises);
//     console.log('所有文件都已成功保存到本地');
// }



export  default {
    startZIP,
    endZIP
}